//
//  ViewFrameModifier.swift
//  imprint
//
//  Created by 小柠檬🍋 on 2025/2/22.
//

import SwiftUI

// 自定义偏好键用于获取视图宽度高度
//给view新增扩展方法
extension View{
    public func getHeight(height:Binding<CGFloat>) -> some View {
        //modifier 给当前试图进行修改
        modifier(ViewHeightModifier(height: height))
    }
    public func geiWidth(width:Binding<CGFloat>) -> some View {
        //modifier 给当前试图进行修改
        modifier(ViewWidthModifier(width: width))
    }
}

/**
 * 试图修改器
 */
struct ViewHeightModifier: ViewModifier {
    @Binding var height: CGFloat

    func body(content: Content) -> some View {
        ZStack {
            content
                .overlay(
                    GeometryReader { geometry in
                        Color.clear
                            .preference(key: ViewHeightKey.self, value: geometry.size.height)
                    }
                )
                .onPreferenceChange(ViewHeightKey.self) { height in
                    self.height = height
                }
        }
    }
}

/**
 * 试图修改器
 */
struct ViewWidthModifier: ViewModifier {
    @Binding var width: CGFloat
    func body(content: Content) -> some View {
        ZStack {
            content
                .overlay( //注意：不要使用background，虽然也能计算，但是遇到单独的试图，马上gg了
                    GeometryReader { geometry in
                        Color.clear
                            .preference(key: ViewHeightKey.self, value: geometry.size.width)
                    }
                )
                .onPreferenceChange(ViewHeightKey.self) { width in
                    self.width = width
                }
        }
    }
    
}

// 自定义偏好键用于获取视图高度
struct ViewHeightKey: PreferenceKey {
    static var defaultValue: CGFloat = 0
    static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) {
        value = nextValue()
    }
}
